package trash.Tmp;


import trash.Tmp.Tmp1.AnotherParent;


public class ProtectedPublicTest
{
    public static void main(String[] args)
    {
        Parent p1 = new Parent();
        p1.myPrint();  // доступ внутри пакета

        // Доступа не будет, ибо это protected, а пакет другой!!!
        //AnotherParent p2 = new AnotherParent();
        //p2.myPrint();

        // Расширение доступа, по сути новый метод
        ChildAnother c = new ChildAnother();
        c.myPrint();

        // Расширение типа возвращаемого результата Object -> String (String шире чем Object, у него есть новые методы)
        System.out.println(new Parent().getIt().getClass().getSimpleName());
        System.out.println(new Child().getIt().getClass().getSimpleName());
    }


}

class Parent
{
    protected void myPrint()
    {
        System.out.println("I'm parent! ");
    }
    public Object getIt() {
        return 9000;
    }
}

class Child extends Parent
{
    @Override
    public String getIt()
    {
        return "Lala = " + (Integer)super.getIt();
    }
}

class ChildAnother extends AnotherParent
{
    @Override
    public void myPrint()
    {
        super.myPrint();
        System.out.println("I'm Child");
    }
}
